iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Software Development

ROS進階學習筆記系列 第 16

Day 16 - ROS Topic / Service / Action 比較

  • 分享至 

  • xImage
  •  

昨天終於把action的概念寫完,因此想來寫一篇ros三大資料傳遞方式的比較:

  • topic: 最簡單也最常看到的應用,每支node都可以獨立作業publish/subscribe,並根據收到的topic進行作業。
  • service: 需要依靠server端進行資料的處理,好處是client端只需要call API就可以進行後續的作業,不一定要自行實作該API。
  • action: 進階的service用法,在service中加入更多的需求,可以進行任務的進度更新,以及終止條件等。

那麼這三者在設計資料傳遞的時候應該如何選擇呢? 在ROS官網其實有做了一些分析:

Topics

  • 應該被使用於連續性的資料流傳遞,例如相機的影像、機器的狀態等。
  • 資料流應該要可以被任何獨立的sender/receiver傳遞,支援多對多的串接。
  • subscriber接收資料即呼叫callback function進行處理,而publisher應可決定何時發送資料。

Services

  • 應使用於外部呼叫,且呼叫的過程很短暫的情況,例如查表、計算等。
  • 不應使用在需要長時間進行處理的作業,否則該作業應該要能被中斷(也就是action的情況)。
  • 使用簡易的blocking 進行呼叫,最常使用在需要快速處理比對資料的作業。
  • client端發送request,server端接收並回傳response。

Actions

  • 應使用於分散式的狀態機處理,並且需要在執行請求的過程中持續發送feedback。
  • 跟service很像但不一樣的地方就是他可以因為一些條件而被中斷作業。
  • 每個任務的life cycle是獨立的,若有兩個goal在同一個action server上被執行,可以根據它產生的id獨立作業。
  • 最好使用的時機為需要花費數秒的工作,或是初始化一些底層控制的模式的時候,可以監聽狀態以及設定終止條件的情況。
  • 使用分散式的non-blocking方式做處理,更符合真實世界中作動的感覺,以自駕車為例,車子在往前開的時候若遇障礙物,則需要中斷本來的路線規劃,並執行停止/re-routing的任務。

Reference

https://wiki.ros.org/ROS/Patterns/Communication#Communication_via_Topics_vs_Services_vs_X
https://answers.ros.org/question/11834/when-should-i-use-topics-vs-services-vs-actionlib-actions-vs-dynamic_reconfigure/
https://pojenlai.wordpress.com/2012/11/03/ros-topic-service-and-actionlib/
https://www.itread01.com/content/1550221751.html


上一篇
Day 15 - ROS Action APIs
下一篇
Day 17 - ROS cross compilation
系列文
ROS進階學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言